package com.java.simple.study.jvm.classloader;

/**
 * @author zhoujunlin
 * @date 2022年05月15日 21:29
 * @desc
 */
public class ClassLoaderTest {

    public static void main(String[] args) {
        // 获取系统类加载器 AppClassLoader
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);  // sun.misc.Launcher$AppClassLoader@18b4aac2

        // 获取其上层  扩展类加载器
        ClassLoader extClassLoader = systemClassLoader.getParent();
        System.out.println(extClassLoader); // sun.misc.Launcher$ExtClassLoader@4dc63996

        // 获取其上层 null  引导类加载器由c语言编写 无法获取
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        System.out.println(bootstrapClassLoader); //null

        // 对于用户自定义类来说  默认使用系统类加载器进行记载
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        // 类加载器全局唯一
        System.out.println(classLoader); //  sun.misc.Launcher$AppClassLoader@18b4aac2
        System.out.println(classLoader.getParent()); //sun.misc.Launcher$ExtClassLoader@4dc63996

        // String类使用引导类加载器进行加载的  Java核心类库都是使用引导类加载器
        classLoader = String.class.getClassLoader();
        System.out.println(classLoader); //null

    }

}
